package fit.decorator.performance;

import fit.Fixture;
import fit.Parse;
import fit.decorator.exceptions.InvalidInputException;
import fit.decorator.util.Timer;

public class TimeRange extends TimeBasedFixtureDecorator {
	public static final String MIN_TIME = "minTime";
	public static final String MAX_TIME = "maxTime";
	protected long maxTime;
	private long minTime;

	public TimeRange() {
		super();
	}

	TimeRange(Timer stopWatch) {
		super(stopWatch);
	}

	@Override
	protected void run(Fixture fixture, Parse table) {
		super.run(fixture, table);
		summary.put(ACTUAL_TIME_TAKEN, new Long(elapsedTime));
	}

	@Override
	protected void setupDecorator(String[] arguments)
			throws InvalidInputException {
		if (arguments.length != 2) {
			throw new InvalidInputException("Time range must be specified");
		}
		minTime = Long.parseLong(arguments[0]);
		summary.put(MIN_TIME, new Long(minTime));
		maxTime = Long.parseLong(arguments[1]);
		summary.put(MAX_TIME, new Long(maxTime));
	}

	@Override
	protected void updateColumnsBasedOnResults(Parse table) {
		updateColumns(table.parts.parts.more, elapsedTime, minTime, false);
		updateColumns(table.parts.parts.more.more.more, elapsedTime, maxTime,
				true);
	}
}
